Visualize Latest Observations from the Ambient Weather Stations#

Imports#

import glob
import xarray as xr
from bokeh.models.formatters import DatetimeTickFormatter
import hvplot.xarray
import holoviews as hv
from distributed import Client
import warnings

warnings.filterwarnings("ignore")
hv.extension('bokeh')

Start up a Dask Cluster#

client = Client()
client

Client

Client-198b1832-f0ef-11ed-8eaf-00224802d42f

Connection method: Cluster object Cluster type: distributed.LocalCluster
Dashboard: http://127.0.0.1:8787/status

Cluster Info

Read the Sorted Data, Using the Last File#

files = sorted(glob.glob('../../data/surface-meteorology/*/*/*/*.nc'))

ds = xr.open_mfdataset(files[-60:])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[3], line 3
      1 files = sorted(glob.glob('../../data/surface-meteorology/*/*/*/*.nc'))
----> 3 ds = xr.open_mfdataset(files[-60:])

File /usr/share/miniconda3/envs/instrument-cookbooks-dev/lib/python3.10/site-packages/xarray/backends/api.py:1010, in open_mfdataset(paths, chunks, concat_dim, compat, preprocess, engine, data_vars, coords, combine, parallel, join, attrs_file, combine_attrs, **kwargs)
    997     combined = _nested_combine(
    998         datasets,
    999         concat_dims=concat_dim,
   (...)
   1005         combine_attrs=combine_attrs,
   1006     )
   1007 elif combine == "by_coords":
   1008     # Redo ordering from coordinates, ignoring how they were ordered
   1009     # previously
-> 1010     combined = combine_by_coords(
   1011         datasets,
   1012         compat=compat,
   1013         data_vars=data_vars,
   1014         coords=coords,
   1015         join=join,
   1016         combine_attrs=combine_attrs,
   1017     )
   1018 else:
   1019     raise ValueError(
   1020         "{} is an invalid option for the keyword argument"
   1021         " ``combine``".format(combine)
   1022     )

File /usr/share/miniconda3/envs/instrument-cookbooks-dev/lib/python3.10/site-packages/xarray/core/combine.py:975, in combine_by_coords(data_objects, compat, data_vars, coords, fill_value, join, combine_attrs, datasets)
    973     concatenated_grouped_by_data_vars = []
    974     for vars, datasets_with_same_vars in grouped_by_vars:
--> 975         concatenated = _combine_single_variable_hypercube(
    976             list(datasets_with_same_vars),
    977             fill_value=fill_value,
    978             data_vars=data_vars,
    979             coords=coords,
    980             compat=compat,
    981             join=join,
    982             combine_attrs=combine_attrs,
    983         )
    984         concatenated_grouped_by_data_vars.append(concatenated)
    986 return merge(
    987     concatenated_grouped_by_data_vars,
    988     compat=compat,
   (...)
    991     combine_attrs=combine_attrs,
    992 )

File /usr/share/miniconda3/envs/instrument-cookbooks-dev/lib/python3.10/site-packages/xarray/core/combine.py:648, in _combine_single_variable_hypercube(datasets, fill_value, data_vars, coords, compat, join, combine_attrs)
    646     indexes = concatenated.indexes.get(dim)
    647     if not (indexes.is_monotonic_increasing or indexes.is_monotonic_decreasing):
--> 648         raise ValueError(
    649             "Resulting object does not have monotonic"
    650             " global indexes along dimension {}".format(dim)
    651         )
    653 return concatenated

ValueError: Resulting object does not have monotonic global indexes along dimension station

Plot the Data#

formatter = DatetimeTickFormatter(hours="%d %b %Y \n %H:%M UTC")

variables = ['outdoor_temperature', 'outdoor_dewpoint', 'hourlyrainin', 'solarradiation']

panels = []
for variable in variables:
    panels.append(ds[variable].hvplot.line(x='time', by='station', xformatter=formatter))
hv.Layout(panels).cols(1)